﻿ #region Disclaimer/Info
 
 /////////////////////////////////////////////////////////////////////////////////////////////////
 //
 //   File:		IUrlBuilderBase.cs
 //   Website:		http://dexterblogengine.com/
 //   Authors:		http://dexterblogengine.com/About.ashx
 //   Rev:		1
 //   Created:		19/01/2011
 //   Last edit:		19/01/2011
 //   License:		GNU Library General Public License (LGPL)
 //   File:            IUrlBuilderBase.cs
 //   For updated news and information please visit http://dexterblogengine.com/
 //   Dexter is hosted to Codeplex at http://dexterblogengine.codeplex.com
 //   For any question contact info@dexterblogengine.com
 //
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 #endregion
 

using System;
using System.Web.Mvc;
using Dexter.DataTransferObject;
using Dexter.Domain.Model;

namespace Dexter.Services {
	/// <summary>
	/// 	Rapresents the contract for the basic url builder.
	/// </summary>
	public interface IUrlBuilderBase {
		/// <summary>
		/// 	Gets the home page <see cref = "Uri" />.
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com
		/// </example>
		Uri HomePage { get; }

		/// <summary>
		/// 	Gets the pingback url.
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com/pingback.axd
		/// </example>
		string PingBackUrl { get; }

		/// <summary>
		/// 	Gets the feed url.
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com/feeds/rss
		/// </example>
		string FeedUrl { get; }

		/// <summary>
		/// 	Gets the track back url.
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com/mMetaWeblog.axd
		/// </example>
		string MetaWeblogApi { get; }

		/// <summary>
		/// 	Gets the meta weblog RSD url.
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com/MetaWeblogRsd.axd
		/// </example>
		string MetaWeblogRsd { get; }

		/// <summary>
		/// 	Gets the open search.
		/// </summary>
		/// <value>The open search.</value>
		/// <example>
		/// 	http://dexterblogengine.com/OpenSearch.axd
		/// </example>
		string OpenSearch { get; }

		/// <summary>
		/// 	Gets the search page.
		/// </summary>
		/// <value>The open search.</value>
		/// <example>
		/// 	http://dexterblogengine.com/Search/
		/// </example>
		string SearchHome { get; }

		/// <summary>
		/// 	Gets the search page.
		/// </summary>
		/// <value>The open search.</value>
		/// <example>
		/// 	http://dexterblogengine.com/Contact/
		/// </example>
		string ContactHome { get; }

		/// <summary>
		/// 	Gets the favicon url.
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com/images/favicon.ico
		/// </example>
		string Favicon { get; }

		/// <summary>
		/// 	Gets the last comments page url.
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com/lastcomments
		/// </example>
		string LastComments { get; }

		/// <summary>
		/// 	Gets the trackback url.
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com/trackback.axd
		/// </example>
		string TrackBackUrl ( Item item );

		/// <summary>
		/// 	Gets the trackback url.
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com/trackback.axd
		/// </example>
		string TrackBackUrl ( PostLightDto item );

		/// <summary>
		/// 	Gets the search page url.
		/// </summary>
		/// <param name = "keyword">The keyword.</param>
		/// <example>
		/// 	http://dexterblogengine.com/search/keyword
		/// </example>
		string Search ( string keyword );

		/// <summary>
		/// 	Resolves the URL.
		/// </summary>
		/// <param name = "value">The value.</param>
		/// <returns></returns>
		string ResolveUrl ( string value );

		/// <summary>
		/// Gets the log on.
		/// </summary>
		/// <value>The log on.</value>
		string LogOn { get; }

		/// <summary>
		/// Gets the log off.
		/// </summary>
		/// <value>The log off.</value>
		string LogOff { get; }


		/// <summary>
		/// Add the specified page to the specified url;
		/// </summary>
		/// <param name="pageIndex">Index of the page.</param>
		/// <param name="viewContext">The view context.</param>
		/// <returns></returns>
		string SetPageToUrl ( int pageIndex , ViewContext viewContext );

		/// <summary>
		/// 	Return the url for the combined styles route
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com/resources/style/yourkey/
		/// </example>
		string StylesheedCombinedUrl ( string key );

		/// <summary>
		/// 	Return the url for the combined javascript route
		/// </summary>
		/// <example>
		/// 	http://dexterblogengine.com/resources/js/yourkey/
		/// </example>
		string JavascriptCombinedUrl ( string key );
	}
}
